package pe.gob.sedapal.scmultimedia.service.impl;

import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.gob.sedapal.scmultimedia.dao.CalleDAO;
import pe.gob.sedapal.scmultimedia.dao.DeudaDAO;
import pe.gob.sedapal.scmultimedia.dao.DistritoDAO;
import pe.gob.sedapal.scmultimedia.dao.LocalidadDAO;
import pe.gob.sedapal.scmultimedia.dao.NumeroDAO;
import pe.gob.sedapal.scmultimedia.dao.ProvinciaDAO;
import pe.gob.sedapal.scmultimedia.dao.SuministroDAO;
import pe.gob.sedapal.scmultimedia.domain.Calle;
import pe.gob.sedapal.scmultimedia.domain.Deuda;
import pe.gob.sedapal.scmultimedia.domain.Distrito;
import pe.gob.sedapal.scmultimedia.domain.Localidad;
import pe.gob.sedapal.scmultimedia.domain.Numero;
import pe.gob.sedapal.scmultimedia.domain.Provincia;
import pe.gob.sedapal.scmultimedia.domain.Suministro;
import pe.gob.sedapal.scmultimedia.service.EstadoCuentaService;

@Service(value="estadoCuentaService")
public class EstadoCuentaServiceImpl implements EstadoCuentaService{
	
	@Autowired	
	private ProvinciaDAO provinciaDAO;
	@Autowired	
	private DistritoDAO distritoDAO;
	@Autowired	
	private LocalidadDAO localidadDAO;
	@Autowired	
	private CalleDAO calleDAO;
	@Autowired	
	private NumeroDAO numeroDAO;
	@Autowired
	private SuministroDAO suministroDAO;
	@Autowired
	private DeudaDAO deudaDAO;
	
	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Provincia> listarProvinciasPorDepartamento(Long codDpto) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("codDpto", codDpto);
		provinciaDAO.listarProvinciasPorDepartamento(map);
		return (List<Provincia>)map.get("result");
		//return provinciaDAO.listarProvinciasPorDepartamento(map);
	}	

	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Distrito> listarDistritosPorProvincia(Long codProv) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("codProv", codProv);
		distritoDAO.listarDistritosPorProvincia(map);
		return (List<Distrito>)map.get("result");
		//return distritoDAO.listarDistritosPorProvincia(codProv);
	}

	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Localidad> listarLocalidadesPorDistrito(Long codMunic) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("codMunic", codMunic);
		localidadDAO.listarLocalidadesPorDistrito(map);
		return (List<Localidad>)map.get("result");
		//return localidadDAO.listarLocalidadesPorDistrito(codMunic);
	}

	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Calle> listarCallesPorLocalidad(Long codLocal) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("codLocal", codLocal);
		calleDAO.listarCallesPorLocalidad(map);
		return (List<Calle>)map.get("result");
		//return calleDAO.listarCallesPorLocalidad(codLocal);
	}

	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Numero> listarNumerosPorCalle(Long codCalle) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("codCalle" ,codCalle);
		numeroDAO.listarNumerosPorCalle(map);
		return (List<Numero>)map.get("result");
		//return numeroDAO.listarNumerosPorCalle(codCalle);
	}

	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Suministro> listarSuministrosPorNumero(Long nif) {
		HashMap<String, Object>map = new HashMap<String, Object>();
		map.put("nif", nif);
		suministroDAO.listarSuministrosPorNumero(map);
		return (List<Suministro>)map.get("result");
		//return suministroDAO.listarSuministrosPorNumero(nif);
	}
	
	@Override
	@Transactional
	public Suministro obtenerSuministro(Long nis) {
		HashMap<String, Object>map = new HashMap<String, Object>();
		map.put("nis", nis);
		suministroDAO.obtenerSuministro(map);
		@SuppressWarnings("unchecked")
		List<Suministro> lista = (List<Suministro>)map.get("result"); 
		if(lista == null){
			return null;
		}else{
			if(lista.size() == 0){
				return null;
			}
		}
		return lista.get(0);
		//return suministroDAO.obtenerSuministro(map);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	@Transactional
	public List<Deuda> listarDeudasPorSuministro(Long nis) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("nis", nis);
		deudaDAO.listarDeudas(map);
		return (List<Deuda>)map.get("result");
		//return deudaDAO.listarDeudas(nis);
	}
	
	public ProvinciaDAO getProvinciaDAO() {
		return provinciaDAO;
	}

	public void setProvinciaDAO(ProvinciaDAO provinciaDAO) {
		this.provinciaDAO = provinciaDAO;
	}

	public DistritoDAO getDistritoDAO() {
		return distritoDAO;
	}

	public void setDistritoDAO(DistritoDAO distritoDAO) {
		this.distritoDAO = distritoDAO;
	}

	public LocalidadDAO getLocalidadDAO() {
		return localidadDAO;
	}

	public void setLocalidadDAO(LocalidadDAO localidadDAO) {
		this.localidadDAO = localidadDAO;
	}

	public CalleDAO getCalleDAO() {
		return calleDAO;
	}

	public void setCalleDAO(CalleDAO calleDAO) {
		this.calleDAO = calleDAO;
	}

	public NumeroDAO getNumeroDAO() {
		return numeroDAO;
	}

	public void setNumeroDAO(NumeroDAO numeroDAO) {
		this.numeroDAO = numeroDAO;
	}

	public SuministroDAO getSuministroDAO() {
		return suministroDAO;
	}

	public void setSuministroDAO(SuministroDAO suministroDAO) {
		this.suministroDAO = suministroDAO;
	}
	
}
